package src;

/**
 * @version : 1.0.0
 * @author：jacky
 * @date : 2020/1/17
 * 在一个二维数组中，每一行都按照从左到右递增的顺序排序，
 * 每一列都按照从上到下递增的顺序排序。请完成一个函数，
 * 输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。
 */
public class First_ArrayFind {


    // TODO 解题思路
    /*
    首先选取数组中右上角的数字。如果该数字等于要查找的数字，查找过程结束。
如果该数字大于要查找的数字，剔除这个数字所在的列：
如果该数字小于要查找的数字，剔除这个数字所在的行。
也就是说如果要查找的数字不在数组的右上角，则每－次都在数组的查找范围中剔除行或者一列，这样每一步都可以缩小查找的范围，直到找到要查找的数字，或者查找范围为空。
     */
    /*
      这个二维数组的行是按照从左到右依次递增，列是按照从上到下依次增大
      所以下面的数一定大于上面的数，右边的数一定大于左边的数
      可以定义到右上角，开始遍历，如果输入的整数小于它，则必定是在左边，如果大于它的话，必定是在下面
     */
    public static boolean find(int[][] matrix, int number) {

        if (matrix.length < 0 && matrix[0].length - 1 < 0){
            return false;
        }

        int row = 0;
        int col = matrix[0].length - 1;


        while (row < matrix.length && col >= 0) {
            if (matrix[row][col] > number) {
                //回到前一列
                col -= 1;
            } else if (matrix[row][col] < number) {
                //回到下一行
                row += 1;
            }
            else{
                return true;
            }
        }
        return false;
    }
}
